import { Login } from "@/api/interface/index";
import { PORT1 } from "@/api/config/servicePort";
import authMenuList from "@/assets/json/authMenuList.json";
import authButtonList from "@/assets/json/authButtonList.json";
import http from "@/api";

/**
 * @name 登录模块
 */
// 用户登录
export const loginApi = (params: Login.ReqLoginForm) => {
  return http.post<Login.ResLogin>(PORT1 + `/admin/login`, params, { loading: false }); // 正常 post json 请求  ==>  application/json
  // return http.post<Login.ResLogin>(PORT1 + `/login`, params, { loading: false }); // 控制当前请求不显示 loading
  // return http.post<Login.ResLogin>(PORT1 + `/login`, {}, { params }); // post 请求携带 query 参数  ==>  ?username=admin&password=123456
  // return http.post<Login.ResLogin>(PORT1 + `/login`, qs.stringify(params)); // post 请求携带表单参数  ==>  application/x-www-form-urlencoded
  // return http.get<Login.ResLogin>(PORT1 + `/login?${qs.stringify(params, { arrayFormat: "repeat" })}`); // get 请求可以携带数组等复杂参数
};

// 获取菜单列表
// 获取菜单列表（根据权限过滤）
export const getAuthMenuListApi = (params: Menu.MenuParams) => {
  // 1. 从本地JSON获取完整菜单
  const fullMenuList = authMenuList.data;

  // 2. 根据用户权限过滤菜单
  const filteredMenu = filterMenuByPermission(fullMenuList, params.permissions);

  // 3. 返回与原始JSON相同的结构，但data是过滤后的菜单
  return {
    ...authMenuList, // 保留code/msg等字段
    data: filteredMenu
  };
};

// 递归过滤菜单的辅助函数
function filterMenuByPermission(menus: Menu.MenuOptions[], userPermission: string): Menu.MenuOptions[] {
  return menus
    .filter(menu => {
      // 检查用户是否有该菜单权限
      const hasPermission = menu.roles.includes(userPermission);

      // 如果有子菜单，先过滤子菜单
      if (menu.children && menu.children.length > 0) {
        menu.children = filterMenuByPermission(menu.children, userPermission);
        // 只有子菜单不为空时才保留
        return hasPermission && menu.children.length > 0;
      }

      return hasPermission;
    })
    .map(menu => ({ ...menu })); // 浅拷贝避免修改原始数据
}

// 获取按钮权限
export const getAuthButtonListApi = () => {
  // return http.get<Login.ResAuthButtons>(PORT1 + `/auth/buttons`, {}, { loading: false });
  // 如果想让按钮权限变为本地数据，注释上一行代码，并引入本地 authButtonList.json 数据
  return authButtonList;
};

// 用户退出登录
export const logoutApi = () => {
  return new Promise(resolve => {
    resolve({
      code: 200,
      msg: "退出成功",
      data: null
    });
  });
};
